package com.example.exam001.controller;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.exam001.domain.Enterprise;
import com.example.exam001.domain.dto.EnterpriseDto;
import com.example.exam001.service.impl.impl.EnterpriseServiceImpl;
import com.example.exam001.utils.ConverTo;
import com.example.exam001.vo.R;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

import java.util.*;

/**
 * 主体信息相关API接口控制器
 */
@RestController
@RequestMapping("/enterprise")
@Slf4j
public class EnterpriseController {

    private final EnterpriseServiceImpl enterpriseService;

    @Autowired
    public EnterpriseController(EnterpriseServiceImpl enterpriseService) {
        this.enterpriseService = enterpriseService;
    }


    /**
     * 创建企业信息
     * @param enterpriseDto 包含企业信息的数据传输对象
     * @return 成功或错误的响应
     */
    @PostMapping
    public Object create(@RequestBody EnterpriseDto enterpriseDto) {
        return R.byStatus(enterpriseService.save(enterpriseDto.getEnterprise()));
    }

    @PatchMapping
    public  Object createOrUpdate(@RequestBody EnterpriseDto enterpriseDto){
        return R.byStatus(enterpriseService.saveOrUpdate(enterpriseDto.getEnterprise()));
    }

    /**
     * 根据ID删除企业信息
     * @param id 企业ID
     * @return 成功或错误的响应
     */
    @DeleteMapping("/{id}")
    public Object delete(@PathVariable Long id){
        boolean result = enterpriseService.removeById(id);
        if(result) {
            return R.success();
        }else{
            return R.error();
        }
    }

    /**
     * 批量删除企业信息
     * @param ids 企业ID列表
     * @return 成功或错误的响应
     */
    @DeleteMapping
    public Object delete(@RequestBody List<Long> ids){
        boolean result = enterpriseService.removeBatchByIds(ids);
        if(result) {
            return R.success();
        }else{
            return R.error();
        }
    }

    /**
     * 根据企业id更新相应数据信息
     * @param enterpriseDto 包含企业id的企业数据信息
     * @return 修改结果
     */
    @PutMapping("/")
    public Object update(@RequestBody EnterpriseDto enterpriseDto){
        return R.byStatus(enterpriseService.updateById(enterpriseDto.getEnterprise()));
    }

    @PutMapping
    public Object update(@RequestBody List<Enterprise> enterpriseList){
        return R.byStatus(enterpriseService.updateBatchById(enterpriseList));
    }

    /**
    * 根据id查询企业信息
    * @param id 查询id
    * @return 企业信息
     */
    @GetMapping("/{id}")
    public Object query(@PathVariable Long id){
        log.info("id = " + id);
        return R.success(new HashMap<>(){{
            put("enterprise", enterpriseService.getById(id));
        }});
    }

    /**
     * 根据条件分页查询企业信息
     * @param conditions 查询条件
     * @return 包含分页信息的响应
     */
    @GetMapping
    public Object query(
            @RequestParam(required = false) Map<String, String> conditions
    ) {
        log.info("conditions = " + conditions);
        Page<Enterprise> resultPage = enterpriseService.selectPage(conditions);
        // 创建一个 HashMap 来存储结果
        return R.success(new HashMap<>() {{
            // 存储企业列表
            put("enterpriseList", resultPage.getRecords());
            // 存储总数
            put("totalCount", resultPage.getTotal());
            // 存储当前页数
            put("currentPage", resultPage.getCurrent());
            // 存储总页数
            put("totalPages", resultPage.getPages());
        }});
    }
}
